/*
 【基础】棋盘里的麦子
  题目描述
    传说西塔发明了国际象棋而使国王十分高兴，他决定要重赏西塔，
    西塔说：“我不要你的重赏，陛下，只要你在我的棋盘上赏一些麦子就行了。
            在棋盘的第 1 个格子里放 1 粒，在第 2 个格子里放 2 粒，
            在第 3 个格子里放 4 粒，在第 4 个格子里放 8 粒，依此类推，
            以后每一个格子里放的麦粒数都是前一个格子里放的麦粒数的 2 倍，直到放满第 64 个格子就行了”。
        “区区小数，几粒麦子，这有何难，来人”，国王令人如数付给西塔。
      计数麦粒的工作开始了，第一格内放 1 粒，第二格内放 2 粒第三格内放 4 粒，… 还没有到第二十格，一袋麦子已经空了。
      一袋又一袋的麦子被扛到国王面前来。但是，麦粒数一格接一格飞快增长着，国王很快就看出，
      即便拿出全国的粮食，也兑现不了他对西塔的诺言。

      请你编程帮助国王计算出，第n个棋盘格子中需要放多少粒麦子？
  输入
    一个整数N代表第n格棋盘（n<=100）
  输出
    一个整数，代表第n格棋盘中麦子的总数。
  样例输入
    3
  样例输出
    4
*/

#include <bits/stdc++.h>

using namespace std;

/*
  说明: 本文的代码实现中，高精度乘法的代码实现为什么要用全局变量?
  解答: 在乔斯 OJ 上，最开始使用局部变量，但是 OJ 提示出现栈溢出，
        所以才在对应的代码实现中, 将局部变量改用成用全局变量!
*/
string a = "1", b = "2";
int num[101] = {};  // 该全局变量用于存放"高精度乘法"的中间计算结果。
                    // 注意: 由于是全局变量, 每次进行计算前要对该变量清零,
                    //       才能保证高精度乘法和高精度加法的计算结果的正确性!

/*
  该函数计算 2 个高精度数相乘的结果。
    这 2 个高精度数如下:
      "string 类型的全局变量 a 表示的 10 进制数"
      "string 类型的全局变量 b 表示的 10 进制数"
    相加后的结果保存在 string类型的全局变量 a 中
*/
void f() {
    // 1. 计算乘法的积每位上的数（不算进位）
    for (int i = 0; i < a.size(); i++) {
        for (int j = 0; j < b.size(); j++) {
            int a1 = a[i]-'0', b1 = b[j] - '0';
            num[i + j + 1] = num[i + j + 1] + a1 * b1;
        }
    }

    // 2. 处理进位
    for (int i = a.size() + b.size()-1; i >= 1; i--) {
        num[i - 1] += num[i] / 10;
        num[i] %= 10;
    }

    int m = a.size();
    /*
      特别注意 !!!
      由于要将结果放在 a 中，并且 a 为非空字符，而且后面 2 行的代码处理中，直接在 a 的基础上添加字符，
      为保证最后的结果的正确性，这里需要将字段串 a 清空！
    */
    a.clear();

    // 3. 累加(将乘法的积转换成 string）
    for (int i = m + b.size() - 1; i >= 0; i--) {
        a = char(num[i] + '0') + a;
    }

    // 4. 去除前导零
    while (a.size() > 1 && a[0] == '0') {
        a.erase(0, 1);
    }
}

int main() {
    int n;

    cin >> n;

    if (n == 1) {
        cout << 1;
        return 0;
    } else {
        for (int i = 2; i <= n; i++) {
            // 注意: 由于在后面调用 f() 进行高精度乘法计算时会用到全局变量 numi，
            //       并且根据 f() 函数中的代码实现，为保证高精度计算的正确性，我们需要对其进行初始化!
            for (int j = 0; j <= 100; j++) {
                num[j] = 0;
            }

            /*
              调用函数 f(), 对于 string 类型的全局变量 a 和 b，进行高精度乘法计算，
              并将计算结果保存在 string 的类型全局变量 a 中。
            */
            f();
        }
        cout << a;
    }

    return 0;
}